Spatio-temporal Wikidata. Exploration de données collaboratives du web 3.0
Histoire de cadre : élaboration d’une trajectoire spatio-temporelle
Cette fiche est le fruit d’une collaboration interdisciplinaire de membres du GT Notebook dans le cadre d’un atelier proposé aux Journées d’étude normande sur les données de la recherche qui se sont déroulées en décembre 2021. L’association de plusieurs compétences et disciplines a abouti à ce notebook présentant une analyse exploratoire reproductible de données collaboratives Wikidata, mises à disposition au format RDF. Les enjeux d’un tel processus inter-disciplinaire sont esquissés en conclusion. Les requêtes SPARQL élaborées ont fait l’objet d’une présentation et d’échanges au sein des Ateliers du Web Sémantique au printemps 2021.
Introduction
Cette fiche présente une exploration de données collaboratives Wikidata mises à disposition au format RDF (cf. partie 1.2). Du requêtage en langage SPARQL (cf. partie 3) au traitement et à la représentation graphique des données Wikidata, ce document présente, étape par étape, l’ensemble de la chaîne de traitement réalisée. Le processus exploratoire des données, parfois itératif, a été conservé. Cela permet de bien comprendre l’approche réflexive des auteurs et autrice et de retranscrire au mieux la démarche scientifique exploratoire.
Les données utilisées, issues de la base Wikidata, sont régulièrement mises en jour. La structure de ces données est présentée dans la partie 1. Les données automatiquement collectées (le 03 avril 2023) et utilisées dans ce document sont mises à disposition (partie 2.2) afin de permettre une reproduction des traitements et des résultats présentés.
L’idée de départ qui conduit à la démarche proposée est de requêter des données Wikidata et leurs modalités pouvant comporter une dimension spatiale et temporelle, et ainsi reconstruire une ou des trajectoires dans le temps et l’espace. Compte-tenu du formalisme et de la spécificité des données non supervisées de Wikidata, l’objet choisi pour l’étude, après exploration, est une peinture, sur son support physique inséré dans un cadre, susceptible d’être exposée au sein d’un musée ou d’une institution culturelle dans le monde.
Un exemple d’exploration de données Wikidata, aisément
reproductible pour différentes entités (peintres), est présentée dans la
partie 7.
1 Wikimédia, Wikiproject & W3C
1.1 Données Wikidata
Wikidata est une base de connaissances libre, éditée de manière collaborative et hébergée par la Wikimedia Foundation. Son contenu étant placé sous licence CC0 (« Transfert dans le Domaine Public »), elle permet de centraliser les données utilisées par différents projets Wikimedia (Wikipédia (2021)).
Les informations saisies dans Wikidata sont des données “brutes” multilingues non-supervisées, qui sont liées aux informations accessibles dans le texte des articles de l’encyclopédie contributive Wikipedia. Wikidata est à différencier de l’ontologie DBpédia qui est le moyen de traduire Wikipedia en dépôts de données définis dans le cadre de description des ressources du standard Ressources Description Framework (RDF) du World Wide Web Consortium1 (W3C).
Cette base fournit un support à de nombreux autres sites et
services au-delà des seuls projets Wikimedia. Son contenu est
exporté dans des formats standards et peut être relié à d’autres
ensembles de données ouvertes sur le web des données2.
Wikidata offre ainsi un large domaine d’informations
générales sur notre univers et des liens vers d’autres bases de données.
Il contient, à ce jour, plus de 100 millions d’items.
1.2 Standard RDF du W3C
Il existe plusieurs méthodes pour accéder à ces données. Dans ce document, nous utilisons un accès à la base de données Wikidata mises à disposition au format RDF sans toutefois expliciter le langage de requête SPARQL, qui n’est pas l’objet de la fiche.
Le RDF (Resource Description Framework) est un cadre général de modélisation utilisé pour décrire formellement les ressources Web et leurs métadonnées, afin de permettre le traitement par inférence de telles descriptions. Développé par le W3C, RDF est le formalisme de base du Web sémantique.
Un document structuré en RDF est un ensemble de triplets3, chaque
triplet associant un sujet, un prédicat et un objet):
- le « sujet » représente la ressource à décrire;
- le « prédicat » représente un type de propriété
applicable à cette ressource;
- l’ « objet » représente une donnée ou une autre
ressource : c’est la valeur de la propriété.
Le sujet et l’objet, dans le cas où ce sont des ressources, peuvent être identifiés par un identifiant unique de la ressource (URI4) ou être des nœuds anonymes. Le prédicat est nécessairement identifié par un URI.
Pour plus d’informations, il est possible de consulter l’introduction à Wikidata ou la page Wikibase dédiée à un formalisme du
type Ressource Description Framework (RDF) du dépôt de données
Wikidata.
1.3 Le langage SPARQL
SPARQL (prononcé sparkle, en anglais : « étincelle ») est un langage de requête et un protocole qui permet de rechercher, d’ajouter, de modifier ou de supprimer des données RDF disponibles à travers Internet. Son nom est un acronyme récursif qui signifie SPARQL Protocol and RDF Query Language. (Wikipédia (2022))
Plusieurs langages de requête destinés à interroger les graphes RDF ont été développés. Le langage SPARQL, développé par le W3C, est destiné à devenir le standard en ce domaine. Aujourd’hui, le Web des données (ou Linked Open Data) est constitué de centaines de services SPARQL qui mettent à disposition de plus en plus de données au travers d’Internet comme le fait le projet Wikidata (Wikipédia (2022)).
Dans ce notebook, quelques requêtes de base permettant d’interroger
la base de données Wikidata utilisent les éléments suivants
:
- la clause SELECT ?data WHERE{}
qui renvoit les variables spécifiques et leurs liens lorsqu’une liste de
noms de variables est donnée,
- un service WikiLabel spécifique au point d’accès Wikidata
Query Service,
- l’option de la clause SELECT, OPTIONAL,
permettant de renvoyer les variables même si elles ne sont pas
instanciées (noeuds vides) sur la liste de noms de variables,
- et les préfixes associés aux fragments de graphe RDF de
Wikidata (+d’info).
2 Packages et données
2.1 Packages utilisés
Les packages utilisés pour réaliser l’ensemble de la chaîne de
traitement présenté dans ce document sont: -
WikidataQueryServiceR: fournit une API client pour le Wikidata Query
Service (cf. partie
3);
- rnaturalearth: met à disposition les données
géographiques de Natural Earth;
- sf: permet la gestion et la manipulation de données
géographiques;
- mapview: permet de produire des cartes interactives, en
utilisant la librairie JavaScript
Leaflet;
- tmap: permet de produire de cartes thématiques;
- ggplot2: pour la production de graphiques, basés sur la
grammaire
graphique;
- av: permet de générer des vidéos à partir d’images ou de
graphiques R;
- patchwork: permet de combiner facilement plusieurs
graphiques ggplot2;
- jpeg: permet d’importer, enregistrer et afficher des
images matricielles (format bitmap);
- DT: met en forme dynamique (HTML) des tableaux de données
(bibliothèque javascript DataTables).
Pour installer l’ensemble de ces packages, vous pouvez utiliser les lignes de code suivantes, qui vérifient que les packages nécéssaires ne soient pas déjà installés sur votre machine :
# Liste des packages nécessaires
liste_packages <- c("WikidataQueryServiceR",
"rnaturalearth",
"sf",
"mapview",
"tmap",
"ggplot2",
"av"
"patchwork",
"jpeg",
"DT",
"dplyr")
# Packages à installer
liste_packages_to_install <- liste_packages[!(liste_packages %in% installed.packages()[,"Package"])]
# Installation des packages manquants
install.packages(liste_packages_to_install)Pour Installer le package glitter :
install.packages("remotes")
install.packages("remotes") #if remotes is not already installed2.2 Données collectées
Plusieurs sources de données sont utilisées pour ce travail exploratoire:
- Données issues de la base Wikidata ;
- Couche géographique Natural Earth;
- Fonds de carte mis à disposition par Leaflet.
3 Interrogation de Wikidata
Un service de collecte des
données de Wikidata en langage SPARQL est mis à disposition
et offre une solution très complète en première approche (exemples,
assistant de requêtes, diversité des représentations etc.). Toutefois,
dans une dynamique d’exploration de la base de données
Wikidata, l’utilisation de R facilite l’archivage et la
reproductibilité des différentes requêtes réalisées. Pour cette raison,
nous utilisons le package WikidataQueryServiceR
qui fournit une Interface de Programmation d’Application (API) pour
interroger le Wikidata Query Service directement via
R.
WikidataQueryServiceR a été développé par Mikhail Popov,
membre de la Fondation Wikimédia. Il s’est inspiré des packages WikipediR et WikidataR.
3.1 Modèle des données ciblées
L’objectif de cette analyse consiste à s’intéresser à un·e peintre et à la circulation de ses peintures. Dans Wikidata, les peintres, peintures et lieux d’exposition sont modélisés selon les représentations schématiques ci-dessous (Figures 4 et 6.a à c), comprenant des entités liées entre elles et mobilisant une syntaxe spécifique avec des préfixes5. Le fragment de graphe de données Wikidata utilisé ici est illustré en figure 6b, ci-dessous. Après plusieurs explorations, nous avons décidé de nous intéresser au peintre néerlandais du 17e siècle, Johannes Vermeer.
Pour construire la requête SPARQL permettant d’interroger les données brutes, il est nécessaire de connaître le graphe de données sous-jacent.
Dans Wikidata, ce peintre est une entité donnée à trouver
(toute entité Wikidata est désignée par le préfixe
wd:), ayant pour propriété directe (préfixe
wdt:) d’être une instance de Wikidata ayant les
propriétés suivantes :
- (P31)-de nature (Q5)-humaine;
- (P373)-ayant pour catégorie commune le libellé sous la forme de chaîne de caractères “Johannes Vermeer”;
- celui-ci (P18)-ayant pour image le résultat associé (ici, l’adresse URL de l’image).
3.2 Première requête SPARQL
Nous interrogeons donc la base Wikidata concernant le peintre Johannes Vermeer, instance de Wikidata (classe d’objet P31), qui est un humain Q5 et qui répond au libellé (P373) “Johannes Vermeer”.
A l’aide de la fonction query_wikidata du package
WikidataQueryServiceR, nous commençons dans un premier
temps par obtenir l’illustration associée à Johannes Vermeer (renseignée
par la propriété P18), avec la
requête SPARQL suivante :
# Package API pour le 'wiki data service'
library(WikidataQueryServiceR)
# Recherche de l'artiste nommé 'Johannes Vermeer' et de(s) l'illustration(s) associée(s)
data1 <- query_wikidata('
SELECT ?identifiant ?image WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
?identifiant wdt:P31 wd:Q5 ; wdt:P373 "Johannes Vermeer" .
?identifiant wdt:P18 ?image .
}
')
# Ou avec glitter
library(glitter)
data1 <- spq_init() %>%
spq_add("?identifiant wdt:P31 wd:Q5") %>%
spq_add(". wdt:P373 'Johannes Vermeer'") %>%
spq_add(". wdt:P18 ?image") %>%
spq_perform()Affichage des données collectées en utilisant la fonction
datatable de la library DT :
library(DT)
# Affichage dynamique de la table
datatable(data1)Deux URL sont collectées, celles de :
- l’identifiant : le lien vers la page Wikidata
du peintre Johannes Vermeer ;
- l’image : le lien vers l’image associée à ce peintre
dans Wikidata.
Le résultat renvoyé par cette requête nous permet de constater que le peintre Johannes Vermeer est directement identifié par une URI (entity ID) Q41264 dans Wikidata .
Dans une seconde requête, on liera l’entité trouvée comme (P170)-créatrice des œuvres que l’on cherche à
localiser dans l’espace et le temps.
Pour sauvegarder l’image associée :
# Création des sous-répertoires 'data' et 'data/image'
dir.create("data")
dir.create("data/images")# Téléchargement et sauvegarde de l'image
download.file(url = data1$image,
destfile = 'data/images/portrait_artiste.jpg',
mode = 'wb')3.3 Seconde requête SPARQL
En second lieu, on propose donc de lister l’ensemble des œuvres de Johannes Vermeer (entité ou donnée Wikidata Q41264) et leurs localisations.
Les coordonnées de la localisation (ici, une déclaration ou
statement) associée à une œuvre sont obtenues via la propriété
P625
: wdt:P625.
Pour plus d’informations, vous pouvez consulter l’introduction à Wikidata ou la page Wikibase dédiée au formalisme du Ressource
Description Framework (RDF) du dépôt de données Wikidata.
La requête ci-dessous demande l’identifiant de (ou des) entité·s (œuvre·s), P170-ayant pour créateur l’artiste Q41264-Johannes Vermeer. Cette requête tente également de récupérer P276-le lieu d’exposition renseigné pour chaque œuvre, ainsi que sa localisation géographique (coordonnées géographiques du système de référence World Geodetic System (WGS84).
# Recherche de toutes les œuvres de Johannes Vermeer et de leurs localisations renseignées (musée & institution)
data2 <- query_wikidata('
SELECT ?oeuvreLabel ?museeLabel ?coord
WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
?oeuvre wdt:P170 wd:Q41264 .
OPTIONAL {?oeuvre wdt:P276 ?musee}
OPTIONAL {?musee wdt:P625 ?coord}
}
')
# Ou avec glitter
data2 <- spq_init() %>%
spq_add("?oeuvre wdt:P170 wd:Q41264", .label="?oeuvre") %>%
spq_add("?oeuvre wdt:P276 ?musee",
.label="?musee",
.required=FALSE) %>%
spq_add("?musee wdt:P625 ?coord",
.required=FALSE) %>%
spq_select(-oeuvre,-loc,-musee) %>%
spq_perform()Affichage des données récupérées :
datatable(data2)Dans un second temps, nous nous intéresserons à une œuvre précise de
Johannes Vermeer : A
Young Woman Seated at the Virginals. Dans Wikidata, cette
œuvre est désignée par le biais de l’entité (préfixe wd:)
associée à un identifiant unique : Q4660880.
On constate dans le tableau de résultats ci-dessus que les données (non supervisées) concernant le lieu d’exposition sont très hétérogènes. Alors que certaines œuvres n’ont aucun lieu d’exposition indiqué car l’information n’est tout simplement pas disponible, d’autres présentent plusieurs localisations et dans certains cas, plusieurs fois le même musée.
Pourquoi ?
- un même musée peut avoir plusieurs localisations (plusieurs couples de coordonnées géographiques) renseignées,
- une même œuvre peut être localisée dans plusieurs musées, ou plusieurs fois dans un même musée, mais à des périodes différentes.
Ce constat nécessite d’entrer plus en détail dans les déclarations
(statements) renseignées dans Wikidata, notamment la
localisation de l’œuvre au cours du temps entre divers musées ou
institutions culturelles de divers pays, en utilisant les valeurs et
qualificatifs (qualifiers) associés aux propriétés figurant
dans les déclarations :
L’œuvre intitulée A Young Woman Seated at the Virginals
(entité Q4660880)
est, selon Wikidata, l’œuvre de Johannes Vermeer qui a le plus
voyagé pour être exposée. Cela signifie que cette entité possède le plus
grand nombre de valeurs associées à la propriété location
(propriété P625) dans les déclarations ou statements
de localisation désignant des lieux (préfixe ps), dont les
coordonnées sont données par la propriété P276.
Ce constat ouvre une nouvelle perspective en matière d’analyse
exploratoire. Nous allons donc nous intéresser à la trajectoire
spatio-temporelle de cette œuvre.
3.4 Troisième requête SPARQL
Comme illustré dans la figure 6b, la localisation d’une entité est
déclarée au moyen d’une propriété (P276), qui permet
l’accès à: - une localisation de l’œuvre dans un lieu (géographique
et institutionnel) : wdt:P276, objet de la seconde requête
(voir Figure 6a),
- ou à un ensemble de localisations renseignées dans le temps (voir
Figure 6c) : p:P276 associée aux qualifiers
de la déclaration de lieu (désignée par le préfixe pq:)
donnant une période temporelle (date de début : P580 et date de
fin: P582).
Pour connaître les modalités de circulation de l’œuvre dans divers musées et institutions, la requête SPARQL ci-dessous collecte les noms des différents lieux d’exposition (P276), ainsi qu’une dimension spatio-temporelle associée, qui est composée de coordonnées géographiques (P625) et des dates de début et de fin (P580 & P582) de la période pendant laquelle l’œuvre (Q4660880) semble avoir été présente dans les différents lieux (figure 6c). La requête permet également d’obtenir l’image (figure 7) de l’œuvre ciblée (P18).
# Recherche de tous les lieux (nom, coordonnées, date de début et de fin) où l'œuvre :
# "A Young Woman Seated at the Virginals" de Johannes Vermeer a été exposée.
data <- query_wikidata('
SELECT ?image ?nomLabel ?dated ?datef ?coord WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
wd:Q4660880 p:P276 ?location ; wdt:P18 ?image .
?location ps:P276 ?nom .
?location pq:P580 ?dated .
?location pq:P582 ?datef .
?nom wdt:P625 ?coord .
}
')%>%
select(musee=nomLabel,dated,datef,coord,image)
# Ou avec glitter:
data <- spq_init() %>%
spq_add("wd:Q4660880 wdt:P18 ?image") %>%
spq_add("wd:Q4660880 p:P276 ?location") %>%
spq_add("?location ps:P276 ?nom",
.label="?nom") %>%
spq_add("?location pq:P580 ?dated") %>%
spq_add("?location pq:P582 ?datef") %>%
spq_add("?nom wdt:P625 ?coord") %>%
spq_select(nomLabel,dated,datef,coord) %>%
spq_perform() %>%
select(musee=nomLabel,dated,datef,coord,image)Affichage des données récupérées :
Enregistrement et (ré)import des données :
# Enregistrement des données en format csv
write.csv(x = data, file = "data/data.csv", row.names = FALSE)
# Import du fichier de données enregistrées
data <- read.csv("data/data.csv", row.names = NULL)Enregistrement de l’image de l’œuvre :
download.file(url = data$image[1],
destfile = 'data/images/Q4660880.jpg',
mode = 'wb')Les trois requêtes SPARQL ont ainsi permis de collecter respectivement :
- l’image et l’identifiant associés à Johannes Vermeer dans Wikidata (data1) ;
- les œuvres du peintre Johannes Vermeer et leur localisation (musée + coordonnées) (data2) ;
- les informations de localisation (nom du musée, coordonnées et dates) des lieux où a été exposée l’œuvre A Young Woman Seated at the Virginals de Johannes Vermeer (data).
4 Exploration spatiale
Les données non-supervisées collectées nécessitent toujours d’être contrôlées et nettoyées avant d’être exploitées. De plus, les données obtenues comportent des coordonnées géographiques qui permettent de les convertir en véritable couche géographique afin de les cartographier et ainsi d’exploiter leur dimension spatiale.
4.1 Les œuvres de Johannes Vermeer
Les données issues de la seconde requête SPARQL (data2) listent l’ensemble des œuvres de Vermeer et leurs localisations respectives (nom du musée et coordonnées géographiques quand elles existent) selon Wikidata. Avant de les cartographier, quelques traitements sont nécessaires :
- Suppression des doublons et des œuvres sans aucune localisation renseignée ;
- Calcul du nombre d’œuvres par musée (localisation) ;
- Géoréférencement6 des musées abritant des œuvres de Vermeer.
4.1.1 Nettoyage des données
Dans cette partie, nous allons uniquement nous intéresser à la dimension spatiale des données collectées, sans prendre en compte la dimension temporelle. Si aucune coordonnée géographique n’est renseignée (cf. partie 3.3), nous ne prendrons pas en compte le musée recensé. En revanche, nous considérons l’ensemble des localisations comportant des coordonnées géographiques, peu importe la temporalité qui leur est associée.
Commençons par supprimer les localisations (musée ou institution) qui ne sont pas associées à des coordonnées géographiques dans Wikidata :
data2 <- data2 %>%
filter(!is.na(coord))Nous pouvons ensuite supprimer les doublons, que l’on peut expliquer par le fait qu’une œuvre ait pu être exposée à plusieurs reprises dans un même musée, ou qu’un même lieu ait pu être renseigné par plusieurs couples de coordonnées géographiques dans Wikidata.
Pour cela, nous utilisons la fonction duplicated,
appliquée au couple “nom de l’œuvre + lieu d’exposition”
data2 <- data2 %>%
group_by(oeuvreLabel,museeLabel) %>%
summarise(coord=first(coord))Affichage des données filtrées :
datatable(data2)4.1.2 Regroupement par musée
Plusieurs œuvres semblent avoir été exposées dans les mêmes lieux. Afin de cartographier les musées ayant exposé différentes œuvres de Johannes Vermeer, nous réalisons un regroupement des œuvres par intitulé des musées (museeLabel), tout en calculant le nombre d’œuvres que chacune de ces institutions a exposées au cours du temps.
–>
# Regroupement et calcul du nombre d'œuvres par musée
nb_oeuvres_musee=data2 %>%
group_by(Museum=museeLabel,Coordinates=coord) %>%
summarise(Nb_oeuvres=n())
# Histogramme de répartition des musées en fonction du nombre d'œuvres de J.V. exposées
library(ggplot2)
ggplot(nb_oeuvres_musee,aes(x=Nb_oeuvres))+
geom_histogram(breaks=0:max(nb_oeuvres_musee$Nb_oeuvres))+
xlab("Nombre d'œuvres exposées")+
ylab("Nombre de musées")4.1.3 Géoréférencement
La variable ‘Coordinates’ stocke les coordonnées géographiques des
musées dans le format WKT7 (Well-known text). A
l’aide du package sf, il est simple de construire des
données géographiques vectorielles permettant l’analyse spatiale avec R
(Simple Features object) à partir de ce
format de stockage. Pour cela, nous utilisons les fonctions
st_as_sfc et st_as_sf.
# Chargement du package sf, pour la gestion de données géographiques vectorielles
library(sf)
# Création d'objets géographiques ponctuels à partir des coordonnées stockées en WKT
geometry <- st_as_sfc(nb_oeuvres_musee$Coordinates, crs = 4326)
# Création d'une couche géographique vectorielle (attributs des musées + géométries)
musee_geo <- st_as_sf(nb_oeuvres_musee, geometry)La table de données a été transformée en couche géographique
manipulable avec R (objet sf), où chaque musée comporte une
géométrie (point localisé dans l’espace, dans le système géographique de
référence WGS84).
Il est maintenant très simple de cartographier les points créés
(musées) sur une carte interactive, en utilisant le package
mapview. Cela permet, entre autres, de vérifier la qualité
des données et du géoréférencement effectué.
# Package pour la cartographie interactive (repose sur la librairie Leaflet)
library(mapview)
# Affichage interactif des musées, sur un fond de carte OpenStreetMap
mapview(musee_geo) 4.1.4 Cartographie thématique
À partir des données collectées et pré-traitées, il est possible de construire une carte interactive en symboles proportionnels représentant le nombre d’œuvres de Johannes Vermeer exposées par musée au cours du temps.
# Package de cartographie thématique
library(tmap)
# Activation du mode de cartographie interactive
tmap_mode(mode = "view")
# Carte en symboles proportionnels
tm_basemap() +
tm_shape(musee_geo) +
tm_symbols(size="Nb_oeuvres",
scale = 4,
col="red3",
border.col="white",
alpha =0.5,
border.lwd=0.1,
border.alpha=0.5,
id = "Museum",
popup.vars=c("Nombre d'œuvres :"="Nb_oeuvres" ))4.1.5 Enrichissement des données
Au vue de la carte précédente, il semble intéressant d’explorer la répartition des œuvres de Johannes Vermeer à l’échelle des pays. Pour cela, il est nécessaire d’enrichir les données. Plusieurs étapes sont nécessaires :
Téléchargement d’un fond de carte pays mis à disposition par
le package rnaturalearth:
# Package permettant d'utiliser l'API de Natural Earth
library(rnaturalearth)
# Téléchargement et enregistrement d'un fond de carte "pays"
world <- ne_download(scale = "medium",
type = "countries",
category = "cultural",
destdir = "data/world",
load = TRUE,
returnclass = "sf")Affichage de la couche géographique :
plot(st_geometry(world))Les attributs des entités (pays) de la couche géographique récupérée sont :
La couche géographique des musées (‘musee_geo’) et le fond de carte
du monde (‘world’) sont géoréférencés dans le même système de
coordonées8 (le WGS84). Nous pouvons
donc réaliser une jointure spatiale qui permet de récupérer pour
chaque musée, le code
ISO3 du pays dans lequel il se situe. Pour cela, nous utilisons la
fonction st_intersection du package sf.
Jointure spatiale entre les musées (points) et les pays (polygones) :
musee_geo <- musee_geo %>%
select(-Coordinates) %>%
st_intersection(world %>% select(pays))Le code ISO3 du pays de localisation a été ajouté à la couche géographique des musées :
4.1.6 Répartition par pays
Le pays de localisation de chaque musée ayant été obtenu, nous pouvons réaliser une représentation graphique de cette distibution spatiale.
Commençons par calculer le nombre total d’œuvres exposées par pays :
nb_oeuvres_pays <- musee_geo %>%
group_by(pays) %>%
summarise(Nb_oeuvres=sum(Nb_oeuvres))Nous pouvons ensuite construire un graphique en utilisant le package
de référence ggplot2.
# Package pour la représentation graphique
library(ggplot2)
# Graphique en barre - Nombre d'œuvres par pays
ggplot(data = nb_oeuvres_pays,
aes(x = reorder(pays, -Nb_oeuvres),
y = Nb_oeuvres, fill = pays)) +
geom_bar(stat = "identity") +
ggtitle("Nombre d'œuvres de Johannes Vermeer exposées, par pays") +
xlab("") +
ylab("") +
scale_fill_manual(values = c("#FC8D62", "#80B1D3" ,"#E78AC3",
"#A6D854","#FFD92F","#E5C494",
"#FB8072","#BEBADA","#66C2A5",
"#FFFFB3","#8DA0CB")) +
annotate(geom="text",
x = 9, y = 13,
label = "Une œuvre peut\navoir été exposée\ndans plusieurs pays" ) +
theme(legend.position = "none")4.2 La ‘Dame assise au virginal’
Les données issues de la troisième requête SPARQL (‘data’) contiennent l’ensemble des localisations renseignées pour l’œuvre de Johannes Vermeer A Young Woman Seated at the Virginals (ou Dame assise au virginal en français). Nous allons donc réaliser un processus de nettoyage et de géoréférencement très semblable à celui de la partie précédente.
4.2.1 Nettoyage des données
Suppression des doublons :
data <- data %>%
group_by(musee,dated,datef) %>%
summarise_all("first")4.2.2 Géoréférencement
Géoréférencement des musées à partir de la variable ‘coord’ :
# Création d'objets géographiques ponctuels à partir des coordonnées stockées en WKT
geometry <- st_as_sfc(data$coord, crs = 4326)
# Création d'une couche géographique vectorielle (attributs des musées + géométries)
data_geo <- st_as_sf(data, geometry)
# Affichage des données
datatable(data_geo)Plusieurs musées, comme le Ashmolean Museum, apparaissent plusieurs fois dans la table car l’œuvre y a fait plusieurs séjours. Nous effectuons un regroupement des expositions par musée.
# Regroupement par musée - Calcul du nombre total d'expositions
nb_expos_musee_geo <- data_geo %>%
group_by(musee) %>%
summarise(nb_expos=n())Il est facile d’afficher ces données géographiques ponctuelles sur un fond de carte dynamique, en améliorant cette fois-ci la mise en page des pop-ups contenant les attributs de chaque musée.
# Popup content
impath="http://commons.wikimedia.org/wiki/Special:FilePath/Vermeer%20-%20A%20young%20Woman%20seated%20at%20the%20Virginals.jpg"
nb_expos_musee_geo <- nb_expos_musee_geo %>%
mutate(popup= paste0( "<img src='",impath,"' width='180'><br />",
"<b>",musee,"</b>",
"<br />Nombre d'expositions de l'œuvre :",
"<b>",nb_expos,"</b>"))
# Carte
mapview(nb_expos_musee_geo,
zcol = "musee",
col.regions = "red",
legend = FALSE,
popup = "popup",
map.types = "Esri.WorldImagery")4.2.3 Enrichissement des données
De la même manière que dans la partie 4.1.5, nous enrichissons
ces données en obtenant le pays de localisation de chaque musée. Pour
cela, nous réalisons une jointure spatiale en utilisant la fonction
st_intersection du package sf.
# Jointure spatiale points/pays
data_geo <-data_geo %>%
st_intersection(world %>% select(pays))On vérifie que le code ISO3 du pays a bien été collecté pour chaque point (musée).
5 Trajectoire spatio-temporelle
Nous allons mainenant prendre en compte la dimension temporelle des données collectées, c’est à dire la période d’exposition du tableau A Young Woman Seated at the Virginals dans chaque musée, comme renseigné dans Wikidata.
5.1 Période d’exposition du tableau
Pour manipuler facilement le temps, nous commençons par convertir les
dates d’arrivée et de départ de l’œuvre dans chaque musée en format de
type date.
data_geo <- data_geo %>%
mutate(dated=as.Date(dated),
datef=as.Date(datef))Il est ensuite simple de caculer le nombre de jours de présence dans un musée avec une soustraction. Nous sauvegardons ces valeurs (nombre de jours) dans une nouvelle colonne (‘nb_days’)
data_geo <- data_geo %>%
mutate(duree=as.integer(datef-dated))Le tableau a été exposé à deux reprises dans plusieurs musées. Nous calculons donc le nombre de jour total d’exposition du tableau par musée.
data_musee=data_geo %>%
group_by(musee,pays) %>%
summarise(duree=sum(duree),
nb_expos=n())–>
Plusieurs informations collectées peuvent être cartographiées. Voici
un exemple de carte interactive réalisée avec le package
tmap, qui représente le nombre de jours d’exposition du
tableau au cours du temps, à l’échelle des musées.
# Activation du mode de cartographie interactive
tmap_mode(mode = "view")
# Construction d'une carte en symbole proportionnel
tm_basemap() +
tm_shape(data_musee) +
tm_bubbles("duree",
col = "pays",
scale = 9,
border.col="white",
alpha = 0.7,
border.lwd=0.1,
border.alpha=0.5,
title.col="Pays d'exposition",
id = "musee",
popup.vars=c("Nombre de séjours :"="nb_expos",
"Nombre total de jours :"="duree"))5.2 Carte temporelle animée
La carte précédente ne permet pas de rendre compte de la trajectoire spatio-temporelle de l’œuvre. Une carte animée représentant la localisation de l’œuvre au cours du temps permettrait de formaliser son déplacement dans l’espace et dans le temps.
Pour cela, nous devons dans un premier temps choisir un pas de temps. La période de temps analysée est de presque 20 ans et le tableau peut avoir été exposé dans deux musées différents au cours d’un même mois. Nous choisissons donc de construire une carte animée réglée sur un pas de temps hebdomadaire, ce qui laissera le temps aux lecteur·rice·s de lire les informations affichées.
Un partir de ce pas de temps, nous créons un data.frame
où chaque ligne représente une semaine calendaire située entre le 8 mars
2001 et le 13 Janvier 2019 à l’aide de la fonction seq.
Nous créons également des colonnes vides qui permettront de stocker
l’ensemble des informations de localisation de l’œuvre pour chaque
semaine.
data_semaine_renseignee=data_geo %>%
st_drop_geometry() %>%
select(musee,dated,datef) %>%
# on récupère les semaines de début et fin de chaque expo
mutate(semained=lubridate::round_date(dated,"week"),
semainef=lubridate::round_date(datef,"week")) %>%
group_by(across(everything())) %>%
# pour chaque ligne-expo, on construit un vecteur 'semaine'
# qui correspond à une sequence de dates allant de semained à semainef
# Pour ce faire on construit un "nid" de données pour chaque ligne-expo
tidyr::nest() %>%
mutate(semaine=purrr::map2(.x=semained,
.y=semainef,
~seq(.x,.y,by="week"))) %>%
# on "dénidifie" ce vecteur (cela consiste à aplatir la colonne-liste 'semaine'
# en répétant les données des autres colonnes autant de fois que nécessaire)
# et ce à l'aide de tidyr::unnest()
tidyr::unnest(semaine) %>%
ungroup() %>%
select(musee,semaine)data_semaine <- tibble(semaine=lubridate::round_date(seq(min(data_geo$dated),
max(data_geo$datef),
"week"),
"week")) %>%
left_join(data_semaine_renseignee,by="semaine") %>%
left_join(data_geo,by="musee")Nous modifions ensuite les valeurs restées manquantes, pour les semaines où la peinture n’a pas été exposée.
data_semaine <- data_semaine %>%
mutate(
# si musee non renseigné, remplace par "Emplacement inconnu"
musee=case_when(is.na(musee)~"Emplacement inconnu",
TRUE~musee),
# si pays non renseigné, remplace par "pays ?"
pays=case_when(is.na(pays)~"pays ?",
TRUE~pays),
# si duree non renseignée, remplace par 0
duree=case_when(is.na(duree)~0,
TRUE~duree))
# Affichage du tableau
datatable(data_semaine)Bien que ce tableau possède une colonne geometry, il
s’agit en fait d’un data.frame. Nous le convertissons en
objet sf (couche géographique).
data_semaine <-st_as_sf(data_semaine)Les données sont prêtes pour créer une carte animée qui représente la
localisation de l’œuvre pour chaque semaine calendaire de 2001 à 2019.
Pour cela, nous utilisons le package tmap, son mode
plot (cartographique statique), sa fonction
tm_facet (génère plusieurs cartes en fonction d’une
variable) et sa fonction tmap_animation pour créer une
carte animée en format vidéo.
# Cartographie en mode statique
tmap_mode(mode = "plot")
# Création d'une carte stockée dans l'objet CARTE
CARTE <- tm_shape(world) + # Ajout fond de carte monde
tm_polygons(col = "grey70",
border.col = "grey60",
border.lwd = 0.2) +
tm_shape(data_semaine) + # Ajout des musées, mais...
tm_symbols(col = "red") +
tm_facets(along = "semaine", # Une carte / semaine grâce à tm_facet
free.coords= FALSE,
drop.units=FALSE) +
tm_layout(main.title ="", # Gestion du titre
panel.label.fontface = 2,
panel.labels = paste0("Semaine du ", format(x = data_semaine$semaine, format = "%d %b %Y" )),
bg.color="lightblue") +
tm_credits(bg.color = 'red', # Affichage Nom des musées et Nombre de jours d'exposition
width = 0.5,
position = c('center', 'bottom'),
text = paste0(data_semaine$musee," (",data_semaine$pays,")\n",data_semaine$duree, " jours d'exposition"),
size = 1.2,
fontface = "bold",
col = 'white',
align = 'center')Avec la fonction tm_facet, ce bout de code crée autant
de cartes qu’il y a de lignes dans le tableau
data_semaine.
Il est ensuite très facile de convertir cet objet list
qui contient l’ensemble des cartes produites en fichier mp4 avec la
fonction tmap_animation. Attention, la création
d’un GIF ou d’une vidéo peut prendre plusieurs minutes.
# install.packages("av")
tmap_animation(tm = CARTE,
filename = "figures/peinture_en_voyage.mp4",
width=800,
height = 400,
fps = 10, # images par seconde
outer.margins = 0)av est nécessaire pour créer
des vidéos avec la fonction tmap_animation. Cette fonction
permet également de créer des GIFs animés, mais il vous sera également
nécessaire d’installer le package gifski pour profiter de
cette fonctionnalité .
Voilà le résultat !
6 Frise chronologique
Bien que la carte animée soit une représentation techniquement aboutie, elle ne transmet pas efficacement les informations sur la trajectoire spatio-temporelle du tableau de Johannes Vermeer au monde des musées. Une représentation statique et axée sur la dimension temporelle, comme une frise chronologique, nous semblerait plus appropriée.
Il existe des packages spécialisés dans la construction de frise
chronologique, comme par exemple vistime. Cependant, afin de s’assurer
d’une certaine liberté pour la mise en forme de la frise, nous utilisons
le package ggplot2 pour concevoir et construire cette
représentation graphique.
6.1 Préparation des données
Une mise en forme des données est nécessaire pour construire ce type
de frise chronologique avec ggplot2. Par exemple, le tri
des données est important pour gérer l’ordre d’apparition des individus
et des modalités sur le graphique.
Tri du tableau en fonction de la date (‘dated’) d’arrivée dans chaque musée.
data_geo <- data_geo %>%
arrange(dated)Tri d’ordre d’apparition des modalités (levels) pour les variables (factor) ‘nomLabel’ et ‘ADM0_A3’
# Liste unique musée (dans l'ordre d'apparition de la table)
musees_ordonnes <- unique(data_geo$musee)
pays_ordonnes <- unique(data_geo$pays)
data_geo <- data_geo %>%
mutate(musee=ordered(as.factor(musee),levels=musees_ordonnes),
pays=ordered(as.factor(pays),levels=pays_ordonnes))Nous créons une nouvelle colonne qui sera utilisée comme étiquette dans le graphique. Dans cette colonne, les noms des musées n’apparaissent qu’une fois, uniquement pour la première exposition.
data_geo <- data_geo %>%
arrange(musee,dated) %>%
group_by(musee) %>%
mutate(rank=1:n()) %>%
mutate(musee_label=case_when(rank==1~musee,
rank>1~NA_character_)) %>%
select(-rank) %>%
ungroup()Tableau de données après traitement :
6.2 Construction graphique
6.2.1 Utilisation des
fonctions ggplot() et geom_segement()
Les variables utilisées pour l’axe des abscisses (x) et des ordonnées
(y) sont définies comme suit dans la fonction ggplot :
- X = ‘dated’ : date d’arrivée dans le musée ;
- y = ‘nomLabel.x’ : nom du musée (label unique).
ggplot(data_geo, aes(x = dated, y = musee))La bibliothèque ggplot2 fonctionne avec une syntaxe
particulière (basée sur la grammaire graphique). Il est possible d’ajouter des
éléments de mise en forme du graphique au fur et à mesure.
Nous commençons par préciser le type de géometrie (ici
geom_segment) et les variables à représenter :
- color = ‘ADM0_A3’ (code ISO3) : pays de localisation ;
- xend = ‘datef’ (date de fin) : limite du segment en x ;
- yend = ‘nomLabel.x’ (nom du musée) : limite du segment en y.
# Construction de 'segments' entre la date d'arrivée (dated) et de départ (datef)
ggplot(data_geo, aes(x = dated, y = musee)) +
geom_segment(aes(xend = datef, yend = musee, color = pays), size = 6)Nous assignons le résultat dans un objet :
Mon_graph=ggplot(data_geo, aes(x = dated, y = musee)) +
geom_segment(aes(xend = datef, yend = musee, label=musee_label, color = pays), size = 6)6.2.2 Couleurs, étiquettes et thème
Maintenant que la base du graphique a été réalisée, nous pouvons procéder à l’amélioration de sa mise en forme en plusieurs étapes :
- ajout des labels avec la fonction
geom_text; - modification de la palette de couleurs avec la fonction
scale_color_manual;
Mon_graph <- Mon_graph +
# Ajout d'une étiquette pour chaque segment représenté
geom_text(aes(label = musee_label, hjust =1.05), size = 3.5, show.legend = FALSE) +
# Modification de la palette de couleurs (pays)
scale_color_manual(values = c("#7570b3", "#e7298a", "#66a61e", "#e6ab02", "#a6761d","#1b9e77", "#d95f02"))
# Affichage du résultat
Mon_graphPuis, à l’aide des fonctions scale_x_date
labs et theme :
- modification de l’axe des abscisses (intervalle des valeurs et étiquettes à afficher) ;
- ajout d’un titre et d’un sous-titre ;
- paramétrage de plusieurs éléments du ‘thème’ (repère, légende, axes, couleur de fond…).
Mon_graph <- Mon_graph +
# Modification de l'axe des abscisses
scale_x_date(date_labels = "%Y", date_breaks = "2 year", minor_breaks = "1 year",
limits = c(as.Date("1994-01-01"),as.Date("2019-01-13")) ) +
# Ajout d'un titre et d'un sous-titre
labs(title = "Le voyage d'un tableau de Johannes Vermeer",
subtitle = "Aux pays des musées, de 2001 à 2019") +
# Paramétrage du 'thème'
theme(panel.grid.major.y = element_blank(),
panel.grid.major.x = element_line(size = 0.2, colour = "#707073"),
panel.grid.minor.x = element_line(size = 0.2, linetype = 3, colour = "#707073"),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(size=8.5, colour = "#FFFFFF"),
axis.title = element_blank(),
rect = element_rect(fill = "#2a2a2b"),
legend.position = c(.93, .27),
legend.key = element_rect(fill = "#2a2a2b"),
legend.key.height = unit(0.1, 'cm'),
legend.background = element_rect(fill = "#2a2a2b"),
legend.margin = margin(0.5,1,1,1),
legend.title = element_blank(),
legend.text = element_text(colour = "#FFFFFF", size = 7),
title = element_text(colour = "#FFFFFF", hjust = 1, vjust = 0),
plot.margin=unit(c(1,1,0.5,1),"cm"))
Mon_graph6.2.3 La touche finale !
Pour terminer la mise en forme de cette frise chronologique,
l’illustration du tableau et son intitulé sont superposés au graphique.
Les bibliothèques jpeg et patchwork nous
permettent d’importer, puis d’insérer une image sur la représentation
graphique.
Import de l’image du tableau dans R
library(jpeg)
img <- readJPEG("data/images/Q4660880.jpg", native = TRUE)Superposition de l’image et de la représentation graphique
library(patchwork)
Mon_graph +
# Titre de l'image
annotate("text",
x = as.Date("1997-03-01"),
y = 7,
colour = "#FFFFFF",
size = 3.4,
label = "Young Woman Seated\nat a Virginal (1670)") +
# Insertion de l'image
inset_element(p = img,
clip = TRUE,
left = 0.04,
right = 0.27,
top = 0.95,
bottom = 0.46)7 À vous d’explorer !
Nous vous proposons d’explorer vous-mêmes le contenu des données
Wikidata. Le bout de code ci-dessous peut être adapté à
n’importe quel·le artiste peintre renseigné·e dans Wikidata. Il
suffit de modifier l’identiant de l’artiste assigné·e dans
l’objet ID et son nom dans l’objet
NOM.
Vous pouvez retrouver l’identifiant Wikidata d’un·e artiste peintre sur la page Wikidata. Indiquez le nom de l’artiste peintre dont vous souhaitez localiser les œuvres dans le champ de recherche. Veillez à bien récupérer l’identifiant correspondant à l’entité ‘artiste’.
7.1 Code reproductible
Voici quelques exmples d’artistes peintres que vous pouvez requêter :
- Salvador Dalí Q5577 ;
- Nandalal Bose Q3348980 ;
- Kalervo Palsa Q320590 ;
- Katsushika Hokusai Q5586 ;
- Edvard Munch Q41406 ;
- Pablo Picasso Q5593.
#-----------------------------------------------------------------------------------------------------#
# #
# Exploration spatio-temporelle #
# de l'exposition des œuvres de ??? #
# Selon *Wikidata* #
# #
#-----------------------------------------------------------------------------------------------------#
#--------------------------------------- PACKAGES NECESSAIRES ----------------------------------------#
# install.packages("WikidataQueryServiceR")
# install.packages("sf")
# install.packages("rnaturalearth")
# install.packages("ggplot2")
# install.packages("tmap")
######################################### CHOIX DE L'ARTISTE ##########################################
ID <- "Q5593"
NOM <- "Pablo Picasso"
#---------------------------------------------- REQUETE ----------------------------------------------#
# Construction de la requête SPARQL avec l'identifiant (ID) indiqué
query <- paste0("SELECT ?oeuvreLabel ?museeLabel ?coord WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language '[AUTO_LANGUAGE],en'. } ?oeuvre wdt:P170 wd:", ID, " . OPTIONAL {?oeuvre p:P276 ?loc . ?loc ps:P276 ?musee . ?musee wdt:P625 ?coord} . }")
library(WikidataQueryServiceR)
my_data <- query_wikidata(query)
#----------------------------------------- NETTOYAGE DONNEES -----------------------------------------#
# Suppression des doublons
my_data <- my_data[!duplicated(my_data$oeuvreLabel), ]
# Suppression entités (musées et institutions) sans coordonnées renseignées
my_data <- my_data[!is.na(my_data$coord), ]
#-------------------------------------- REGROUPEMENT PAR MUSEE ---------------------------------------#
nb_oeuvre <- aggregate(oeuvreLabel ~ coord + museeLabel, data = my_data, FUN = length)
colnames(nb_oeuvre)[3] <- "Nb_oeuvre"
#----------------------------------------- GEOREFERENCEMENT ------------------------------------------#
# Chargement de la librairie sf
library(sf)
# Création d'objets géographiques ponctuels à partir des coordonnées stockées en WKT
geometry <- st_as_sfc(nb_oeuvre$coord, crs = 4326)
# Création d'une couche géographique vectorielle (attributs des musées + géométries)
nb_oeuvre_by_museum <- st_as_sf(nb_oeuvre, geometry)
#------------------------------- ENRICHISSEMENT - JOINTURE SPATIALE ----------------------------------#
#### Import de la couche géographique des pays
library(rnaturalearth)
world <- ne_download(scale = "medium",
type = "countries",
category = "cultural",
destdir = "data/world",
load = TRUE,
returnclass = "sf")
#### Jointure spatiale
nb_oeuvre_by_museum <-st_intersection(nb_oeuvre_by_museum , world[,"ADM0_A3"])
#---------------------------------- GRAPHIQUE NOMBRE ŒUVRES PAR PAYS ---------------------------------#
#### Regroupement par pays
by_country <- aggregate(Nb_oeuvre ~ ADM0_A3 , data = nb_oeuvre_by_museum, FUN = sum)
#### Graphique
library(ggplot2)
ggplot(data = by_country, aes(x = ADM0_A3, y = Nb_oeuvre) ) +
geom_bar(stat="identity") +
ggtitle(paste0("Nombre d'œuvres de ", NOM ,", par pays")) +
xlab("") +
ylab("") +
theme(legend.position = "none",
axis.text.x = element_text(size=8),
axis.text.y = element_text(size=11))
#----------------------------- CARTOGRAPHIE - NOMBRE ŒUVRES PAR MUSEE --------------------------------#
library(tmap)
tmap_mode(mode = "view")
tm_shape(nb_oeuvre_by_museum) +
tm_symbols(size="Nb_oeuvre",
scale = 2,
col="red3",
border.col="white",
alpha =0.5,
border.lwd=0.1,
border.alpha=0.5,
title.size = "Nb d'œuvres",
id = "museeLabel",
popup.vars=c("Nombre d'œuvres"="Nb_oeuvre"))7.2 Données et graphiques produits
Voici un exemple des données et graphiques produits avec l’artiste peintre et graveur norvégien Edvard Munch, ayant pour identifiant Wikidata : Q41406.
ID <- "Q41406"
NOM <- "Edvard Munch"Dans un premier temps, le code permet de collecter l’ensemble des œuvres créees par l’artiste, ainsi que leurs localisations associées via une requête SPARQL. Voici par exemple les données collectées pour Edvard Munch :
Les données sont ensuite nettoyées des doublons et des œuvres qui ne sont jamais associées à des coordonnées géographiques précises, puis regroupées par musée :
Les musées sont alors géoréférencés, ce qui permet de réaliser une jointure spatiale avec une couche géographique des pays, et ainsi d’obtenir leur pays de localisation. Le code produit également une représentation graphique de la répartition des expositions des œuvres par pays :
Enfin, le code construit une carte interactive représentant le nombre d’œuvres exposées par musée :
8 Conclusion - Enjeux interdisciplinaires
L’exemple de visualisations (distant reading) d’une trajectoire spatio-temporelle en histoire à partir de données collectées sur Wikidata propose ainsi de questionner les données utilisées (non supervisées).
Notamment la circulation de l’oeuvre fait apparaître des espaces spatio-temporels où celle-ci est absente des lieux d’exposition. Ce constat engage à ré-interroger les données et le modèle associé. Par exemple, sur la période antérieur à 2004, l’étude de la donnée permet d’identifier la propriété P195 collection qui identifie la collection à laquelle appartient l’œuvre. Le lien hypertexte servant de référence à cette donnée (à savoir la propriété P195 collection appliquée à Q4660880 instanciée par Leiden Collection) donne alors accès aux informations de transfert de propriété en 2004 des héritiers du Baron Frédéric Rolin (Bruxelles) à un amériacin Steve Wynn qui lui-même la cède la même année à la société Otto Naumann Ltd. (New York), qui fait entrer l’œuvre dans son catalogue au sein de la Leiden Collection.
Le notebook sert de support du dialogue entre plusieurs disciplines,
ici, l’histoire, la géographie et l’ingénierie des connaissances. Le
notebook est aussi le lieu d’un processus collaboratif productif de
connaissances (synchrone ou asynchrone), devient un outil pédagogique -
par la formation par la recherche grâce à sa transformation en fiche
rzine et est susceptible de servir de méthodologie (ou “fil
directeur”) reproductible d’un processus similaire pour d’autres
problématiques.
Bibliographie
Annexes
Info session
| setting | value |
|---|---|
| version | R version 4.2.3 (2023-03-15) |
| os | Ubuntu 22.04.2 LTS |
| system | x86_64, linux-gnu |
| ui | X11 |
| language | (EN) |
| collate | fr_FR.UTF-8 |
| ctype | fr_FR.UTF-8 |
| tz | Europe/Paris |
| date | 2023-04-03 |
| pandoc | 2.19.2 @ /usr/lib/rstudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown) |
| package | ondiskversion | source |
|---|---|---|
| dplyr | 1.1.1 | CRAN (R 4.2.3) |
| DT | 0.23 | CRAN (R 4.2.1) |
| ggplot2 | 3.4.1 | CRAN (R 4.2.3) |
| glitter | 0.1.0 | Github (lvaudor/glitter@127b76e58ea0f62048fae65bbcc76d0f52732bac) |
| jpeg | 0.1.10 | CRAN (R 4.2.2) |
| mapview | 2.11.0 | CRAN (R 4.2.1) |
| patchwork | 1.1.1 | CRAN (R 4.2.1) |
| sf | 1.0.12 | CRAN (R 4.2.3) |
| tmap | 3.3.3 | CRAN (R 4.2.1) |
| WikidataQueryServiceR | 1.0.0 | CRAN (R 4.2.1) |
Citation
KRUMMEICH R, PECOUT H, REY-COYREHOURCQ S (2022). “Spatio-temporal, Wikidata, exploration de données collaboratives du web 3.0.”, doi:10.48645/xxxxxx https://doi.org/10.48645/xxxxxx,, https://rzine.fr/publication_rzine/xxxxxxx/.
BibTex :
@Misc{,
title = {Spatio-temporal Wikidata, exploration de données collaboratives du web 3.0},
subtitle = {Histoire de cadre : élaboration d’une trajectoire spatio-temporelle},
author = {Raphaëlle KRUMMEICH and Hugues PECOUT and Sébastien REY-COYREHOURCQ},
doi = {10.48645/xxxxxx},
url = {https://rzine.fr/publication_rzine/xxxxxxx/},
keywords = {FOS: Other social sciences},
language = {fr},
publisher = {FR2007 CIST},
year = {2022},
copyright = {Creative Commons Attribution Share Alike 4.0 International},
}
Glossaire
Le World Wide Web Consortium, abrégé par le sigle W3C, est un organisme de standardisation à but non lucratif, fondé en octobre 1994 chargé de promouvoir la compatibilité des technologies du World Wide Web telles que HTML5, HTML, XHTML, XML, RDF, SPARQL, CSS, XSL, PNG, SVG, MathML et SOAP.↩︎
Le Web des données (linked data, en anglais) est une initiative du W3C (Consortium World Wide Web) visant à favoriser la publication de données structurées sur le Web, non pas sous la forme de silos de données isolés les uns des autres, mais en les reliant entre elles pour constituer un réseau global d’informations.↩︎
Un triplet est un groupe formé par trois éléments dont chacun appartient à un ensemble distinct.↩︎
Un URI (Uniform Resource Identifier, en français Identifiant unique de ressource) est une chaîne qui fait référence à une ressource. Les plus courantes sont les URL, qui identifient une ressource en donnant son emplacement sur le Web. Au contraire, les URN font référence à une ressource grâce à son nom, dans un environnement donné, par exemple le code ISBN d’un livre.↩︎
Un préfixe est une modalité de simplification d’écriture faisant référence à un espace de noms, voir notamment, les préfixes Wikidata [ici](https://www.wikidata.org/wiki/EntitySchema:E49){target=“_blank”}↩︎
Le géoréférencement est l’un des principes fondamentaux des systèmes d’information géographiques (SIG) et de la cartographie assistée par ordinateur (CAO). Un objet géographiques est référencé lorsque l’on lui attribut une localisation (coordonnées géographiques) et une forme (géométrie : point, ligne ou surface).↩︎
Le format Well-known text, abrégé en WKT, peut se traduire par « texte bien lisible ». C’est un format standard en mode texte utilisé pour représenter des objets géométriques vectoriels issus des systèmes d’informations géographiques (SIG), mais aussi des informations s’y rattachant, tels les références de systèmes de coordonnées.↩︎
Un système de coordonnées est un référentiel dans lequel on peut représenter des éléments dans l’espace. Ce système permet de se situer sur l’ensemble du globe terrestre grâce à un couple de coordonnées géographiques.↩︎